#ifndef __SOFTI2C_H_
#define __SOFTI2C_H_

#include <stdint.h>
#include "stm32f429xx.h"

// 设置 PH5 为输出模式
#define SDA_OUT() \
    do { \
        GPIOH->MODER &= ~(GPIO_MODER_MODE5_Msk); \
        GPIOH->MODER |= GPIO_MODER_MODE5_0; \
    } while (0)

// 设置 PH5 为输入模式
#define SDA_IN() \
    do { \
        GPIOH->MODER &= ~(GPIO_MODER_MODE5_Msk); \
    } while (0)

#define IIC_SDA(x) ((x) ? (GPIOH->ODR |= GPIO_ODR_OD5) : (GPIOH->ODR &= ~(GPIO_ODR_OD5)))
#define IIC_SCL(x) ((x) ? (GPIOH->ODR |= GPIO_ODR_OD4) : (GPIOH->ODR &= ~(GPIO_ODR_OD4)))
#define READ_SDA ((GPIOH->IDR & GPIO_IDR_ID5) ? 1 : 0)

void i2cInit(void);
void i2cStart(void);
void i2cStop(void);
uint8_t i2cWaitAck(void);
void i2cAck(void);
void i2cNAck(void);
void i2cSendByte(uint8_t txd);
uint8_t i2cReadByte(uint8_t ack);

#endif
